package com.yootk.nacos;

import com.alibaba.nacos.api.NacosFactory;
import com.alibaba.nacos.api.PropertyKeyConst;
import com.alibaba.nacos.api.config.ConfigService;
import com.alibaba.nacos.api.config.listener.Listener;

import java.util.Properties;
import java.util.concurrent.Executor;
import java.util.concurrent.TimeUnit;

/**
 * Nacos配置项监听
 */
public class NacosConfigListener {
    public static final String NACOS_SERVER = "nacos-server:8848"; // Nacos连接地址
    // 此时的命名空间使用的是自定义命名空间（名称为“muyan”，去Nacos中查找）
    public static final String NAMESPACE = "0007211f-2731-495f-bf7e-6845bda78727"; // 命名空间
    public static final String GROUP = "MICROCLOUD_GROUP"; // 分组
    public static final String DATA_ID = "com.yootk.nacos.microcloud.config"; // 存储的KEY

    public static void main(String[] args) throws Exception {
        Properties properties = new Properties(); // 将Nacos的相关属性进行配置
        // 如果要想进行属性的配置，则一定要注意属性的KEY的名称
        properties.put(PropertyKeyConst.SERVER_ADDR, NACOS_SERVER); // 服务地址属性
        properties.put(PropertyKeyConst.NAMESPACE, NAMESPACE); // 命名空间
        // 创建完连接之后，会将此连接包装为ConfigService对象实例返回，这里面实现各种数据操作
        ConfigService configService = NacosFactory.createConfigService(properties); // 创建配置实例
        String content = configService.getConfig(DATA_ID, GROUP, 50000); // 获取配置项
        System.err.println("【初始化配置】" + DATA_ID + " = " + content);
        // 一般来讲是在服务启动的时候进行配置数据的读取，但是也需要提供有配置数据的更新
        configService.addListener(DATA_ID, GROUP, new Listener() {
            @Override
            public Executor getExecutor() {
                return null;
            }
            @Override
            public void receiveConfigInfo(String configInfo) { // 每当更新后可以自动的接收更新
                System.err.println("【配置项更新】" + DATA_ID + " = " + configInfo);
            }
        });
        TimeUnit.MINUTES.sleep(Long.MAX_VALUE); // 持续休眠
    }
}
